package cn.pupil.design;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Description: 抽奖控制
 * @Author: pupil
 * @Date: 2024/06/28 下午 5:14
 */
public class RaffleControl {

    /**
     * 随机抽取指定数量的用户，作为中奖用户
     *
     * @param list  用户集合
     * @param count 指定的中奖数量
     * @return List<RaffleUser> 中奖用户集合
     */
    public List<RaffleUser> doRaffleRandom(List<RaffleUser> list, int count) {
        // 用户集合数量小于等于指定的中奖数量，直接返回
        if (list.size() <= count) {
            return list;
        }

        // 打乱集合顺序
        Collections.shuffle(list);

        // 取出指定数量的中奖用户
        ArrayList<RaffleUser> prizeList = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            prizeList.add(list.get(i));
        }
        return prizeList;
    }

    /**
     * 权重排名获取指定数量的用户，作为中奖用户
     *
     * @param list  用户集合
     * @param count 指定的中奖数量
     * @return List<RaffleUser> 中奖用户集合
     */
    public List<RaffleUser> doRaffleWeight(List<RaffleUser> list, int count) {
        // 按照权重排序
        list.sort((o1, o2) -> {
            int e = o2.getUserWeight() - o1.getUserWeight();
            if (0 == e) return 0;
            return e > 0 ? 1 : -1;
        });
        // 取出指定数量的中奖用户
        List<RaffleUser> prizeList = new ArrayList<>(count);
        for (int i = 0; i < count; i++) {
            prizeList.add(list.get(i));
        }
        return prizeList;
    }
}
